package pe.com.redhut.karaosys.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import pe.com.redhut.karaosys.bean.Cancion;
import pe.com.redhut.karaosys.bean.Interprete;
import pe.com.redhut.karaosys.ex.DAOException;
import pe.com.redhut.karaosys.list.CancionList;
import pe.com.redhut.karaosys.util.ConexionDB;
import pe.com.redhut.karaosys.util.Constante;
import pe.com.redhut.karaosys.util.Filtro;

public class CancionDAO extends BaseDAO {
	
	/**
	 * 
	 * @param filtro
	 * @return
	 * @throws DAOException
	 */
	public CancionList listar(Filtro filtro) throws DAOException {
		
		CancionList list = new CancionList();
		Connection conn = null;
		PreparedStatement pstm = null;
		String sql = "select a.codcan, a.nombre, a.codint, b.nombre as interprete, a.duracion, a.estado" +
				" from cancion a" +
				" inner join interprete b" +
				" on ( a.codint = b.codint )" +
				" where a.nombre like ?";
		
		try {
			conn = ConexionDB.getConnection();
			
			pstm = conn.prepareStatement(sql); 
			pstm.setString(1,filtro.getTexto());
			
			ResultSet rs = pstm.executeQuery();
			while (rs.next()) {
				Cancion cancion = new Cancion();
				
				cancion.setCodigo(rs.getString("codcan"));
				cancion.setNombre(rs.getString("nombre"));
				cancion.setInterprete(new Interprete(rs.getString("codint"), rs.getString("interprete")));
				cancion.setDuracion(rs.getString("duracion"));
				cancion.setEstado(rs.getString("estado"));
				
				list.add(cancion);
			}
			
		} catch (SQLException e) {
			System.err.println(e.getMessage());
		} finally {
			this.closeStatement(pstm);
			this.closeConnection(conn);
			
		}
		
		return list;
	}
	
	/**
	 * 
	 * @param interprete
	 * @return
	 * @throws DAOException
	 */
	public CancionList listar(Interprete interprete) throws DAOException {
		
		CancionList list = new CancionList();
		Connection conn = null;
		PreparedStatement pstm = null;
		String sql = "select a.codcan, a.nombre, a.codint, b.nombre as interprete, a.duracion, a.estado" +
				" from cancion a" +
				" inner join interprete b" +
				" on ( a.codint = b.codint )" +
				" where a.codint = ?";
		
		try {
			conn = ConexionDB.getConnection();
			
			pstm = conn.prepareStatement(sql); 
			pstm.setString(1,interprete.getCodigo());
			
			ResultSet rs = pstm.executeQuery();
			while (rs.next()) {
				Cancion cancion = new Cancion();
				
				cancion.setCodigo(rs.getString("codcan"));
				cancion.setNombre(rs.getString("nombre"));
				cancion.setDuracion(rs.getString("duracion"));
				cancion.setEstado(rs.getString("estado"));
				
				list.add(cancion);
			}
			
		} catch (SQLException e) {
			System.err.println(e.getMessage());
		} finally {
			this.closeStatement(pstm);
			this.closeConnection(conn);
			
		}
		
		return list;
		
	}


}
